#include "list.h"
#include <stdio.h>
#include <stdlib.h>

//开辟空的顺序表
sqlist_t *sqlist_create()
{
    sqlist_t *p = (sqlist_t *)malloc(sizeof(sqlist_t)); //开辟顺序表的空间
                                                        //p：空间首地址
    p->last = -1;
    return p;
}

//为满1 不满0
int sqlist_is_full(sqlist_t *p)
{
    return p->last == N - 1 ? 1 : 0;
}

//插入数据
int sqlist_insert(sqlist_t *p, data_t value)
{
    if (sqlist_is_full(p) == 1)
    {
        printf("full\n");
        return -1; //异常返回-1
    }

    p->last++;
    p->a[p->last] = value;

    return 0; //正常返回0
}

//为空1 不空0
int sqlist_is_empty(sqlist_t *p)
{
    return p->last == -1 ? 1 : 0;
}

//删除最后一个数据
int sqlist_delete(sqlist_t *p)
{
    if (sqlist_is_empty(p) == 1)
    {
        printf("empty\n");
        return -1;
    }
    p->last--;

    return 0;
}

//将指定的旧数据改成新的数据
int sqlist_change(sqlist_t *p, data_t old, data_t new)
{
    int i;
    for (i = 0; i <= p->last; i++)
    {
        if (p->a[i] == old)
        {
            p->a[i] = new;
        }
    }

    return 0;
}

//根据位置查找数据(return)
data_t sqlist_search(sqlist_t *p, int pos)
{
    if (pos < 0 || pos > p->last)
    {
        printf("pos error\n");
        return (data_t)-1;
    }

    return p->a[pos];
}

//按位置插入
int sqlist_insert_pos(sqlist_t *p, int pos, data_t value)
{
    //为满
    if (sqlist_is_full(p))
    {
        printf("full");
        return -1;
    }
    //判断pos的取值区间
    if (pos < 0 || pos > p->last + 1)
    {
        printf("pos error\n");
        return -1;
    }
    //数据往后移动
    int i;
    for (i = p->last; i >= pos; i--)
    {
        p->a[i + 1] = p->a[i];
    }

    //存储数据
    p->a[pos] = value;

    //更新last
    p->last++;

    return 0;
}

//按位置删除
int sqlist_delete_pos(sqlist_t *p, int pos)
{
    //判断为空
    if (sqlist_is_empty(p))
    {
        puts("empty");
        return -1;
    }

    //判断pos有效取值区间
    if (pos < 0 || pos > p->last)
    {
        puts("pos error");
        return -1;
    }

    //数据往前移动
    int i;
    for (i = pos + 1; i <= p->last; i++)
    {
        p->a[i - 1] = p->a[i];
    }

    //更新last
    p->last--;

    return 0;
}

//删除重复
int sqlist_delete_repeat(sqlist_t *p)
{
    int i, j; //i：基准值的下标  j：与基准值比较的下标
    for (i = 0; i < p->last; i++)
    {
        for (j = i + 1; j <= p->last; j++)
        {
            if (p->a[i] == p->a[j])
            {
                sqlist_delete_pos(p, j);
                j--; //重复判断删除后的新数据
            }
        }
    }

    return 0;
}

//遍历顺序表
int sqlist_show(sqlist_t *p)
{
    int i;
    for (i = 0; i <= p->last; i++)
    {
        printf("%d  ", p->a[i]);
    }
    putchar(10);
    return 0;
}
